package weChatPay

/*
收款码支付
*/

const uriMicropay = "https://api.mch.weixin.qq.com/pay/micropay"

/*func PayRequest(log *PayOrder, openid, NotifyURL string) (m map[string]string, err error) {

	c, err := wx.GetLoadPrivateKey()
	if err != nil {
		return
	}
	w, err := wx.GetLoadCertificate()
	if err != nil {
		return
	}
	opts := []option.ClientOption{
		option.WithMerchant(wx.MchID, wx.CertificateSerialNumber, c),
		option.WithWechatPay([]*x509.Certificate{w}),
	}
	client,err := NewClient(context.Background(), opts...)
	if err != nil {
		return
	}
	nowTime := log.CreateTime
	var (
		MchId       = Wx.MchID
		appid       = Wx.MiniAppId
		OutTradeNo  = log.Id
		description = log.Body
		attach      = util.RandAaInt(16)
		TimeExpire  = nowTime.Add(30 * time.Minute).Format("2006-01-02T15:04:05+08:00")
		total       = PriceFen(log.Num)
	)

	data := TransactionsInit(MchId, appid, openid, OutTradeNo, description, NotifyURL, attach, TimeExpire, total)
	var reqBody = make([]interface{}, 3)
	reqBody[0] = data
	defer func() {
		log.ReqBody = JsonToStrIndent(reqBody)
	}()
	response, err := client.Post(ctx, WeChatPayJsApi, data)
	if err != nil {
		return
	}
	body, err := ioutil.ReadAll(response.Body)
	if err != nil {
		return
	}
	m = make(map[string]string)
	json.Unmarshal(body, &m)
	reqBody[1] = m
	timeStamp := util.TimeUtil.Now().Unix()
	timeStampStr := fmt.Sprintf("%d", timeStamp)
	prepay_id := fmt.Sprintf(`prepay_id=%s`, m["prepay_id"])
	m = map[string]string{
		"timeStamp": timeStampStr,
		"nonceStr":  attach,
		"package":   prepay_id,
		"signType":  "RSA",
	}
	Signer := &signers.Sha256WithRSASigner{
		PrivateKey:             Wx.RsaPrivateKey,
		MchCertificateSerialNo: Wx.CertificateSerialNumber,
	}
	msg := fmt.Sprintf("%s\n%s\n%s\n%s\n", appid, timeStampStr, attach, prepay_id)
	a, err := Signer.Sign(ctx, msg)
	if err != nil {
		return
	}
	m["paySign"] = a.Signature
	reqBody[2] = m
	return
}*/
type MicroPay struct {
	MchId          string `json:"mch_id" xml:"mch_id"`                      //商户号 	mch_id 	是 	String(32) 	1900000109 	微信支付分配的商户号
	AppId          string `json:"appid" xml:"app_id"`                       // 公众账号ID 	appid 	是 	String(32) 	wx8888888888888888 	微信分配的公众账号ID（企业号corpid即为此appid）
	NonceStr       string `json:"nonce_str" xml:"nonce_str"`                //随机字符串 	nonce_str 	是 	String(32) 	5K8264ILTKCH16CQ2502SI8ZNMTM67VS 	随机字符串，不长于32位。推荐随机数生成算法
	OutTradeNo     string `json:"out_trade_no" xml:"out_trade_no"`          //商户订单号    out_trade_no    是    String(32)    1217752501201407033233368018    商户系统内部订单号，要求32个字符内（最少6个字符），只能是数字、大小写字母_-|*且在同一个商户号下唯一。详见商户订单号
	TotalFee       int    `json:"total_fee" xml:"total_fee"`                //订单金额 total_fee    是    int    888    订单总金额，单位为分，只能为整数，详见支付金额
	Body           string `json:"body" xml:"body"`                          //商品描述    body    是    String(127)    image形象店-深圳腾大- QQ公仔    商品简单描述，该字段须严格按照规范传递，具体请见参数规定
	SpbillCreateIp string `json:"spbill_create_ip"  xml:"spbill_create_ip"` // 终端IP    spbill_create_ip    是    String(64)    8.8.8.8    支持IPV4和IPV6两种格式的IP地址。调用微信支付API的机器IP
	AuthCode       string `json:"auth_code" xml:"auth_code"`                //付款码    auth_code    是    String(128)    120061098828009406    扫码支付付款码，设备读取用户微信中的条码或者二维码信息 （注：用户付款码条形码规则：18位纯数字，以10、11、12、13、14、15开头）
	
	LimitPay string `json:"limit_pay"` // 指定支付方式 	limit_pay 	否 	String(32) 	no_credit 	no_credit--指定不能使用信用卡支付

	//Sign     string `json:"sign" xml:"sign"`           //	签名 sign    是    String(32)    C380BEC2BFD727A4B6845133519F3AD6    签名，详见签名生成算法
	//SignType string `json:"sign_type" xml:"sign_type"` //签名类型    sign_type    否    String(32)    HMAC-SHA256    签名类型，目前支持HMAC-SHA256和MD5，默认为MD5

	DeviceInfo string `json:"device_info" xml:"device_info"` //设备号 	device_info 	否 	String(32) 	013467007045764 	终端设备号(商户自定义，如门店编号)
	SceneInfo  string `json:"scene_info" xml:"scene_info"`   /*-场景信息 	scene_info 	否 	String(256)
	{"store_info" : {
		"id": "SZTX001",
		"name": "腾大餐厅",
		"area_code": "440305",
		"address": "科技园中一路腾讯大厦" }}


		该字段用于上报场景信息，目前支持上报实际门店信息。该字段为JSON对象数据，对象格式为{"store_info":{"id": "门店ID","name": "名称","area_code": "编码","address": "地址" }} ，字段详细说明请点击行前的+展开
	*/

}
type SceneInfo struct {
	Id       string `json:"id"`        //-门店id 	id 	是 	String(32) 	SZTX001 	门店唯一标识
	Name     string `json:"name"`      //-门店名称 	name 	否 	String(64) 	腾讯大厦腾大餐厅 	门店名称
	AreaCode string `json:"area_code"` //-门店行政区划码 	area_code 	否 	String(6) 	440305 	门店所在地行政区划码，详细见《最新县及县以上行政区划代码》
	Address  string `json:"address"`   //-门店详细地址 	address 	否 	String(128) 	科技园中一路腾讯大厦 	门店详细地址
}

func MicroPayInit() MicroPay {
	return MicroPay{
		MchId:          "",
		AppId:          "",
		NonceStr:       "",
		OutTradeNo:     "",
		TotalFee:       0,
		Body:           "",
		SpbillCreateIp: "",
		AuthCode:       "",
		LimitPay:       "",
		//Sign:           "",
		//SignType:       "",
		DeviceInfo:     "",
		SceneInfo:      "",
	}
}

/*
名称 	变量名 	必填 	类型 	示例值 	描述

商品详情 	detail 	否 	String(6000) 	[{
"goods_detail":[
{
"goods_id":"iphone6s_16G",
"wxpay_goods_id":"1001",
"goods_name":"iPhone6s 16G",
"quantity":1,
"price":528800,
"goods_category":"123456",
"body":"苹果手机"
},
{
"goods_id":"iphone6s_32G",
"wxpay_goods_id":"1002",
"goods_name":"iPhone6s 32G",
"quantity":1,
"price":608800,
"goods_category":"123789",
"body":"苹果手机"
}
]
}]

单品优惠功能字段，需要接入详见单品优惠详细说明
附加数据 	attach 	否 	String(127) 	说明 	附加数据，在查询API和支付通知中原样返回，该字段主要用于商户携带订单的自定义数据
货币类型 	fee_type 	否 	String(16) 	CNY 	符合ISO4217标准的三位字母代码，默认人民币：CNY，详见货币类型
订单优惠标记 	goods_tag 	否 	String(32) 	WXG 	订单优惠标记，代金券或立减优惠功能的参数，详见代金券或立减优惠
交易起始时间 	time_start 	否 	String(14) 	20091225091010 	订单生成时间，格式为yyyyMMddHHmmss，如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则
交易结束时间 	time_expire 	否 	String(14) 	20091227091010

订单失效时间，格式为yyyyMMddHHmmss，如2009年12月27日9点10分10秒表示为20091227091010。注意：最短失效时间间隔需大于1分钟
电子发票入口开放标识 	receipt 	否 	String(8) 	Y 	Y，传入Y时，支付成功消息和支付详情页将出现开票入口。需要在微信支付商户平台或微信公众平台开通电子发票功能，传此字段才可生效
是否需要分账 	profit_sharing 	否 	String(16) 	Y 	Y-是，需要分账
N-否，不分账
字母要求大写，不传默认不分账
*/
